188_CRISPR off-target分析¶
一句话概述¶
CRISPR off-target分析评估guide RNA在基因组中的非预期切割位点,通过计算预测(Cas-OFFinder、CRISPOR)和实验检测(GUIDE-seq、Digenome-seq)两种路线识别脱靶效应,是基因编辑安全性评估的核心环节。
核心知识点表格¶
| 知识点 | 说明 |
|---|---|
| 脱靶定义 | gRNA与非目标位点错配但仍被Cas蛋白切割 |
| 脱靶影响因素 | 错配数量、位置(seed vs non-seed)、错配类型 |
| Seed区域 | PAM近端8-12nt,对结合特异性最关键 |
| 计算预测工具 | Cas-OFFinder、CRISPOR、CRISPRscan |
| 实验检测方法 | GUIDE-seq、CIRCLE-seq、Digenome-seq、DISCOVER-seq |
| CFD分数 | Cutting Frequency Determination score,衡量脱靶活性 |
| MIT特异性分数 | 综合所有潜在脱靶位点的整体特异性评分 |
| 高保真Cas变体 | SpCas9-HF1、eSpCas9、HiFi Cas9等降低脱靶 |
步骤详解¶
第一步:理解脱靶机制¶
白话解释:CRISPR像一把带导航的剪刀,gRNA是导航,Cas9是剪刀。但导航不是100%精确,如果基因组某处的序列与目标相似(有几个碱基不同),剪刀也可能错误地在那里切割。
技术细节:Cas9通过PAM识别和gRNA互补配对进行靶向。PAM近端的seed区域(8-12nt)对结合亲和力影响最大。一般认为1-3个错配可容忍,但具体取决于错配位置。DNA/RNA bulge(插入缺失型错配)也可能导致脱靶。
第二步:使用Cas-OFFinder进行脱靶预测¶
白话解释:Cas-OFFinder是一个搜索工具,在全基因组中搜索所有与gRNA相似的位点,告诉你哪些地方可能发生脱靶。
# 安装Cas-OFFinder
# 下载:http://www.rgenome.net/cas-offinder/
# 准备输入文件
cat << 'EOF' > input.txt
/path/to/hg38.fa
NNNNNNNNNNNNNNNNNNNNNGG
ACGTACGTACGTACGTACGTNNN 5
EOF
# 第1行:参考基因组路径
# 第2行:PAM模式(NGG for SpCas9)
# 第3行:gRNA序列 + 最大错配数
# 运行Cas-OFFinder
cas-offinder input.txt C output.txt
# C = CPU模式, G = GPU模式
# 输出格式
# Bulge_type crRNA DNA Chromosome Position Direction Mismatches Bulge_Size
head output.txt
# 高级用法:允许DNA/RNA bulge
cat << 'EOF' > input_bulge.txt
/path/to/hg38.fa
NNNNNNNNNNNNNNNNNNNNNGG
ACGTACGTACGTACGTACGTNNN 4 1
EOF
# 最后两个数字:最大错配数 最大bulge大小
第三步:使用CRISPOR进行综合评估¶
白话解释:CRISPOR是一个综合性工具,不仅搜索脱靶位点,还给每个gRNA打分(特异性分数和效率分数),帮你选择最好的gRNA设计。
# CRISPOR命令行版
# 安装
pip install crispor
# 运行(也可使用Web版:http://crispor.tefor.net/)
crispor.py \
hg38 \
ACGTACGTACGTACGTACGT \
NGG \
--output crispor_output.tsv
# 输出包含:
# - MIT特异性分数(0-100,越高越特异)
# - CFD分数(每个脱靶位点的切割频率预测)
# - 脱靶位点列表及详细信息
# - gRNA效率评分
# Python中使用CRISPOR API
import requests
def query_crispor(sequence, genome='hg38', pam='NGG'):
"""查询CRISPOR网站获取gRNA评估"""
url = "http://crispor.tefor.net/crispor.py"
params = {
'seq': sequence,
'org': genome,
'pam': pam
}
# 注意:实际使用应遵循CRISPOR的API使用条款
response = requests.get(url, params=params)
return response.text
# 解析Cas-OFFinder结果
import pandas as pd
offtargets = pd.read_csv("output.txt", sep="\t", header=None,
names=["BulgeType", "crRNA", "DNA", "Chrom",
"Position", "Strand", "Mismatches", "BulgeSize"])
# 统计脱靶分布
print("按错配数分布:")
print(offtargets['Mismatches'].value_counts().sort_index())
# 过滤高风险脱靶(≤3错配)
high_risk = offtargets[offtargets['Mismatches'] <= 3]
print(f"\n高风险脱靶位点数(≤3错配): {len(high_risk)}")
print(high_risk[['Chrom', 'Position', 'Strand', 'Mismatches', 'DNA']])
第四步:CFD分数计算¶
白话解释:CFD分数量化每个脱靶位点实际被切割的可能性。它考虑了每个位置的每种错配类型的影响,分数越低脱靶风险越小。
# CFD分数计算
import numpy as np
# Doench 2016论文中的CFD权重矩阵(简化版)
# 每个位置每种错配的权重
def calc_cfd_score(guide, offtarget):
"""计算CFD分数"""
assert len(guide) == len(offtarget) == 20 # 不含PAM
# 位置权重(近PAM端权重更高)
# 实际CFD矩阵更复杂,这里简化
position_weights = {
1: 0.0, 2: 0.0, 3: 0.014, 4: 0.0, 5: 0.0,
6: 0.395, 7: 0.317, 8: 0.0, 9: 0.389, 10: 0.079,
11: 0.445, 12: 0.508, 13: 0.613, 14: 0.851, 15: 0.732,
16: 0.828, 17: 0.615, 18: 0.804, 19: 0.685, 20: 0.583
}
score = 1.0
for i in range(20):
if guide[i] != offtarget[i]:
pos = i + 1
# 错配降低分数
score *= (1 - position_weights.get(pos, 0.5))
return score
# 示例
guide = "ACGTACGTACGTACGTACGT"
ot1 = "ACGTACGTACGTACGTACGA" # 1个错配在位置20
ot2 = "ACGTACGTACGTACGTAAGT" # 1个错配在位置17
print(f"OT1 CFD score: {calc_cfd_score(guide, ot1):.4f}")
print(f"OT2 CFD score: {calc_cfd_score(guide, ot2):.4f}")
第五步:实验方法概览¶
白话解释:计算预测只是估计,要真正知道哪些位点被切了,需要实验验证。GUIDE-seq是金标准方法。
# 主要实验检测方法对比
## GUIDE-seq(Genome-wide Unbiased Identification of DSBs Evaluated by Sequencing)
- 原理:将短双链寡核苷酸(dsODN)整合到Cas9切割位点
- 优势:全基因组无偏检测,灵敏度高
- 限制:需要在活细胞中进行
## CIRCLE-seq(Circularization for In vitro Reporting of Cleavage Effects by Sequencing)
- 原理:体外环化基因组DNA后用Cas9切割
- 优势:无需细胞转染,灵敏度极高
- 限制:体外条件可能高估脱靶
## Digenome-seq(Digitized genome sequencing)
- 原理:体外用Cas9消化基因组DNA后测序
- 优势:简单直接
- 限制:需要高深度测序
## DISCOVER-seq
- 原理:检测MRE11蛋白在切割位点的结合
- 优势:检测细胞内真实切割
- 限制:需要特殊抗体和ChIP-seq
第六步:脱靶结果可视化¶
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import numpy as np
# 可视化gRNA与脱靶位点的比对
def visualize_alignment(guide, offtargets_df, output_file="offtarget_vis.png"):
fig, ax = plt.subplots(figsize=(14, len(offtargets_df)*0.5 + 2))
guide_display = list(guide)
y_pos = len(offtargets_df)
# 画gRNA
for i, nt in enumerate(guide_display):
ax.text(i, y_pos + 1, nt, ha='center', va='center', fontsize=10,
fontweight='bold', color='black',
bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.8))
ax.text(-2, y_pos + 1, 'gRNA', ha='right', va='center', fontweight='bold')
# 画每个脱靶位点
for idx, (_, row) in enumerate(offtargets_df.iterrows()):
ot_seq = list(row['DNA'][:20]) # 不含PAM
y = y_pos - idx
for i, (g, o) in enumerate(zip(guide_display, ot_seq)):
color = 'lightgreen' if g == o else 'salmon'
ax.text(i, y, o, ha='center', va='center', fontsize=9,
bbox=dict(boxstyle='round', facecolor=color, alpha=0.7))
label = f"OT{idx+1} ({row['Mismatches']}mm) {row['Chrom']}:{row['Position']}"
ax.text(-2, y, label, ha='right', va='center', fontsize=8)
ax.set_xlim(-8, 22)
ax.set_ylim(-0.5, y_pos + 2.5)
ax.axis('off')
ax.set_title('Off-target Alignment Visualization', fontsize=14)
plt.tight_layout()
plt.savefig(output_file, dpi=300, bbox_inches='tight')
# 使用示例
# visualize_alignment("ACGTACGTACGTACGTACGT", high_risk)
实战命令速查¶
# Cas-OFFinder搜索脱靶(GPU加速)
cas-offinder input.txt G output.txt
# CRISPOR Web API(推荐Web版)
# http://crispor.tefor.net/
# FlashFry(快速gRNA设计+脱靶预测)
java -jar FlashFry.jar index --tmpLocation tmp/ --database hg38.fa --output hg38_db
java -jar FlashFry.jar discover --database hg38_db --fasta target.fa --output guides.tsv
java -jar FlashFry.jar score --input guides.tsv --output scored.tsv --scoringMetrics doench2014,doench2016,dangerous
# CRISPRitz(允许bulge的脱靶搜索)
crispritz.py search hg38/ guide.txt PAM.txt output/ --mm 6 --bDNA 2 --bRNA 2 -t
面试常问点¶
Q1: 影响CRISPR脱靶的主要因素有哪些? A: (1)错配数量:错配越多脱靶概率越低;(2)错配位置:seed区域(PAM近端8-12nt)的错配影响更大;(3)错配类型:rG:dT wobble配对脱靶风险较高;(4)gRNA序列组成:GC含量影响结合稳定性;(5)Cas蛋白浓度和递送方式:RNP递送比质粒递送脱靶更少。
Q2: MIT特异性分数和CFD分数的区别? A: MIT分数是综合指标,考虑所有潜在脱靶位点的加权总和,反映gRNA的整体特异性。CFD分数针对每个具体的脱靶位点,预测该位点被切割的相对概率。MIT分数用于选择gRNA,CFD分数用于评估具体脱靶位点的风险。
Q3: 如何降低CRISPR脱靶效应? A: (1)选择高特异性gRNA(MIT>70);(2)使用高保真Cas变体(SpCas9-HF1, eSpCas9);(3)使用RNP递送替代质粒递送;(4)降低Cas9浓度或缩短作用时间;(5)使用截短gRNA(17-18nt而非20nt);(6)使用配对Cas9 nickase(需两个gRNA同时结合)。
Q4: 计算预测和实验检测的优缺点? A: 计算预测快速便宜但可能遗漏不规则脱靶(如bulge型),也无法准确预测实际切割效率。实验检测提供真实的脱靶图谱但昂贵耗时。最佳策略是先计算筛选候选位点,再对高风险位点进行实验验证。
Q5: 基因治疗中脱靶分析的标准是什么? A: FDA要求基因治疗产品进行全面的脱靶评估,包括:(1)计算预测(至少2种工具);(2)至少一种无偏全基因组实验方法(如GUIDE-seq);(3)对top脱靶位点进行靶向深度测序验证;(4)在治疗靶细胞中评估(而非替代细胞系)。
易错点¶
- 忽略DNA/RNA bulge:只搜索错配不搜索bulge会遗漏重要脱靶位点
- PAM模式设置错误:SpCas9用NGG,Cpf1用TTTN,不同Cas蛋白PAM不同
- 参考基因组版本不匹配:gRNA设计和脱靶搜索应使用相同版本的基因组
- 过度依赖计算预测:计算工具的预测值和实际切割活性相关性有限
- 忽略个体基因组变异:参考基因组上的脱靶位点在患者基因组中可能因SNP而不同
补充知识¶
高保真Cas9变体¶
| 变体 | 改造策略 | 脱靶降低 | 活性保留 |
|---|---|---|---|
| SpCas9-HF1 | 降低非特异DNA接触 | ~10倍 | ~90% |
| eSpCas9(1.1) | 降低非靶链结合 | ~10倍 | ~85% |
| HiFi Cas9 | 单点突变R691A | ~5倍 | ~95% |
| evoCas9 | 定向进化 | ~50倍 | ~80% |
| Sniper-Cas9 | 正负筛选进化 | ~20倍 | ~90% |